package org.grottarossa.template.data.pojo.table;

import org.grottarossa.template.data.DataType;
import org.grottarossa.template.data.enums.EnumDataType;

/**
 *
 * La Classe rappresenta l'oggetto Cell.
 *
 * @author Marco Sabatini (sabatini.m@gmail.com)
 * @author Maurizio Farina (maurizio.farina@gmail.com)
* @author Marco Trischitta (marco.trischitta@gmail.com)
 * @version %I%, %G%
 * @since 1.0
 *
 * */
public class Cell
{
	/**E' il tipo di dato.*/
	private EnumDataType dataType;
	/**E' il valore effettivo del dato*/
	private Object value;
	/**E' il nome del field*/
	private String fieldName;
	/**E' il nome del field che di solito viene visualizzato.*/
	private String fieldDisplayName;
	/***/
	private boolean addByEngine = false; //TODO: ???
	/**Identifica se la cella contiene un field di tipo enumeratore*/
	private boolean isFieldEnumerator=false;


	public Cell() { }

	/**
	 * @param dataType E' il tipo di dato che viene inserito nella cella.
	 * @param value E' il valore effettivo del dato.
	 * */
	public Cell(EnumDataType dataType, Object value)
	{
		this.setValue(value);
		this.setDataType(dataType);
	}

	/**
	 * @param fieldName E' il nome del field che viene inserito nella cella.
	 * @param value E' il valore effettivo del dato.
	 * */
	public Cell( String fieldName, Object value)
	{
		this.setValue(value);
		this.setFieldDisplayName(fieldName);
		this.setFieldName(fieldName);
	}

	/**
	 * @param fieldName E' il nome del field che viene inserito nella cella.
	 * @param fieldDisplayName E' il nome field che viene di solito visualizzato.
	 * @param value E' il valore effettivo del dato.
	 * */
	public Cell( String fieldName, String fieldDisplayName, Object value)
	{
		this.setValue(value);
		this.setFieldDisplayName(fieldDisplayName);
		this.setFieldName(fieldName);
	}

	/**
	 * @param fieldName E' il nome del field che viene inserito nella cella.
	 * @param fieldDisplayName E' il nome field che viene di solito visualizzato.
	 * @param dataType E' il tipo di dato che viene inserito nella cella.
	 * @param value E' il valore effettivo del dato.
	 * */
	public Cell(String fieldName, String fieldDisplayName, EnumDataType dataType, Object value)
	{
		this.setDataType(dataType);
		this.setValue(value);
		this.setFieldDisplayName(fieldDisplayName);
		this.setFieldName(fieldName);
	}

	/**
	 * @param fieldName E' il nome del field che viene inserito nella cella.
	 * @param dataType E' il tipo di dato che viene inserito nella cella.
	 * @param value E' il valore effettivo del dato.
	 * */
	public Cell(String fieldName, EnumDataType dataType, Object value)
	{
		this.setDataType(dataType);
		this.setValue(value);
		this.setFieldDisplayName(fieldName);
		this.setFieldName(fieldName);
	}

	/**
	 * @param value E' il valore effettivo del dato.
	 * */
	public Cell(Object value)
	{
		this.setValue(value);
	}

	/**
	 * La funzione setta il tipo di dato della cella.
	 * @param dataType E' il tipo di dato che viene inserito nella cella.
	 * */
	public void setDataType(EnumDataType dataType)
	{
		this.dataType = dataType;
	}

	/**
	 * La funzione restituisce il tipo di dato della cella.
	 * @return Type E' il tipo di dato.
	 * */
	public EnumDataType getDataType()
	{
		return dataType;
	}

	public void setValue(Object value)
	{
		this.value = value;
	}

	public Object getValue()
	{
		return value;
	}

	public void setFieldName(String fieldName)
	{
		this.fieldName = fieldName;
	}

	public String getFieldName()
	{
		return fieldName;
	}

	public void setFieldDisplayName(String fieldDisplayName)
	{
		this.fieldDisplayName = fieldDisplayName;
	}

	public String getFieldDisplayName()
	{
		return fieldDisplayName;
	}

	public void setAddByEngine(boolean addByEngine)
	{
		this.addByEngine = addByEngine;
	}

	public boolean isAddByEngine()
	{
		return addByEngine;
	}

	public boolean isNullValue()
	{
		return (value==null);
	}

	public void setFieldEnumerator(boolean isFieldEnumerator) {
		this.isFieldEnumerator = isFieldEnumerator;
	}

	public boolean isFieldEnumerator() {
		return isFieldEnumerator;
	}
}